package dto

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gtime"
)

// 商品表结构体（对应 zc_mall_goods）
type Goods struct {
	g.Meta     `orm:"table:zc_mall_goods"`
	Id         int     `orm:"id" json:"-"`                   // 商品主键（关联用，不返回前端）
	GoodsImg   string  `orm:"goods_img" json:"goodsImg"`     // 商品图片
	GoodsName  string  `orm:"goods_name" json:"goodsName"`   // 商品名称
	GoodsPrice float64 `orm:"goods_price" json:"goodsPrice"` // 商品单价
}

// 订单商品表结构体（对应 zc_order_goods，关联商品表）
type OrderGoods struct {
	g.Meta   `orm:"table:zc_order_info"`
	Id       int `orm:"id" json:"-"`        // 订单商品主键（不返回前端）
	OrderId  int `orm:"order_id" json:"-"`  // 关联订单ID（不返回前端）
	GoodsId  int `orm:"goods_id" json:"-"`  // 关联商品ID（不返回前端）
	GoodsNum int `orm:"goods_num" json:"-"` // 商品数量
	// 关联商品信息：明确指定关联表和映射关系
	Goods *Goods `orm:"with:id=goods_id" json:"-"`
	// ↑ rel:hasOne 表示一对一关联；foreign:当前表的goods_id；local:商品表的id
}

// 订单表结构体（对应 zc_order，关联订单商品表）
type Order struct {
	g.Meta      `orm:"table:zc_order"`
	Id          int         `orm:"id" json:"orderId"`                // 订单主键
	OrderSn     string      `orm:"order_sn" json:"orderSn"`          // 订单号
	CreateTime  *gtime.Time `orm:"create_time" json:"createTime"`    // 创建时间
	Status      int         `orm:"status" json:"status"`             // 订单状态
	PayWaitTime int         `orm:"pay_wait_time" json:"payWaitTime"` // 待支付时长
	// 关联订单商品列表：明确指定关联表和映射关系
	GoodsList []*OrderGoods `orm:"with:order_id=id" json:"-"`
	// ↑ rel:hasMany 表示一对多关联；foreign:订单商品表的order_id；local:当前表的id
	SumFee float64 `json:"sumFee"` // 订单总金额（计算得出）
}

// 前端最终接收的商品列表结构（用于重组数据）
type FrontGoods struct {
	GoodsImg   string  `json:"goodsImg"`
	GoodsName  string  `json:"goodsName"`
	GoodsPrice float64 `json:"goodsPrice"`
	GoodsNum   int     `json:"num"`
}

// 前端最终接收的订单结构
type FrontOrder struct {
	UserId      int           `orm:"user_id" json:"-"`
	OrderId     int           `json:"orderId"`
	OrderSn     string        `json:"orderSn"`
	CreateTime  *gtime.Time   `json:"createTime"`
	Status      int           `json:"status"`
	GoodsList   []*FrontGoods `json:"goodsList"`
	SumFee      float64       `json:"sumFee"`
	PayWaitTime int           `json:"payWaitTime"`
}

// 分页响应结构
type OrderListRes2 struct {
	Page       int           `json:"page"`
	Limit      int           `json:"limit"`
	Total      int           `json:"total"`
	TotalPages int           `json:"totalPages"`
	List       []*FrontOrder `json:"list"`
}
